package models

import (
	"gorm.io/gorm"
	"order_srv/basic/config"
	"time"
)

// DispatchConfig 城市/分组维度的派单策略配置
type DispatchConfig struct {
	Id                  uint64    `gorm:"column:id;type:bigint UNSIGNED;comment:主键;primaryKey;not null;" json:"id"`                                          // 主键
	UserId              uint32    `gorm:"column:user_id;type:int UNSIGNED;comment:用户Id;default:NULL;" json:"user_id"`                                        // 用户Id
	CityId              uint32    `gorm:"column:city_id;type:int UNSIGNED;comment:城市;default:NULL;" json:"city_id"`                                          // 城市
	Strategy            string    `gorm:"column:strategy;type:varchar(32);comment:派单策略，weighted:加权策略，fixed:固定策略;not null;default:weighted;" json:"strategy"` // 派单策略，weighted:加权策略，fixed:固定策略
	MaxDistanceKm       float64   `gorm:"column:max_distance_km;type:decimal(6, 2);comment:最大距离;not null;default:10.00;" json:"max_distance_km"`             // 最大距离
	ScoreWeightDistance float64   `gorm:"column:score_weight_distance;type:decimal(4, 2);comment:距离权重;not null;default:0.60;" json:"score_weight_distance"`  // 距离权重
	ScoreWeightRating   float64   `gorm:"column:score_weight_rating;type:decimal(4, 2);comment:评分权重;not null;default:0.30;" json:"score_weight_rating"`      // 评分权重
	ScoreWeightAccept   float64   `gorm:"column:score_weight_accept;type:decimal(4, 2);comment:接受权重;not null;default:0.10;" json:"score_weight_accept"`      // 接受权重
	DayStartHour        int64     `gorm:"column:day_start_hour;type:bigint;comment:白天开始小时;not null;default:7;" json:"day_start_hour"`                        // 白天开始小时
	NightStartHour      int64     `gorm:"column:night_start_hour;type:bigint;comment:晚上开始小时;not null;default:22;" json:"night_start_hour"`                   // 晚上开始小时
	TimeWindowMinutes   int64     `gorm:"column:time_window_minutes;type:bigint;comment:时间窗口;not null;default:30;" json:"time_window_minutes"`               // 时间窗口
	GrayGroups          string    `gorm:"column:gray_groups;type:varchar(255);comment:灰度分组;not null;" json:"gray_groups"`                                    // 灰度分组
	Version             string    `gorm:"column:version;type:varchar(32);comment:版本;not null;default:v1;" json:"version"`                                    // 版本
	UpdatedAt           time.Time `gorm:"column:updated_at;type:datetime;comment:更新时间;not null;default:CURRENT_TIMESTAMP;" json:"updated_at"`                // 更新时间
}

func (d *DispatchConfig) TableName() string { return "dispatch_config" }

func (d *DispatchConfig) Create(tx *gorm.DB) error {
	if tx != nil {
		return tx.Create(d).Error
	}
	return config.DB.Save(d).Error
}

func (d *DispatchConfig) GetByCityId(cityId uint32) error {
	return config.DB.Where("city_id = ?", cityId).First(d).Error
}
